# gpg4win.m4.in - Installer for GnuPG 4 Windows Makefile.   -*- makefile -*-
# Copyright (C) 2005, 2009 g10 Code GmbH
#
# This file is part of GPG4Win.
#
# GPG4Win is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# GPG4Win is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA


# No servicable parts below this line :)


# These paths must be absolute, as we switch directories pretty often.
root := $(shell pwd)/playground
bdir := $(root)/build
idir := $(root)/install
ipdir := $(root)/install/pkgs
tsdir := $(shell pwd)/${top_srcdir}
pdir := $(shell pwd)/${top_srcdir}/patches
ex_idir := $(root)/install-ex
ex_ipdir := $(root)/install-ex/pkgs

# We collect the names of all pkg files used.
pkg_files =

# The playground area is our scratch area, where we unpack, build and
# install the packages.
stamps/stamp-directories:
	$(MKDIR) stamps
	$(MKDIR) playground
	$(MKDIR) -p installers
	$(MKDIR) $(bdir)
	$(MKDIR) $(idir)
	$(MKDIR) $(ipdir)
	$(if $GPGEX_ADD_HOST, $(MKDIR) $(ex_idir))
	$(if $GPGEX_ADD_HOST, $(MKDIR) $(ex_ipdir))
	touch $(bdir)/versioninfo.txt
	touch stamps/stamp-directories


# Frob the name $1 by converting all '-' and '+' characters to '_'.
define FROB_macro
$(subst +,_,$(subst -,_,$(1)))
endef

# Get the variable $(1) (which may contain '-' and '+' characters).
define GETVAR
$($(call FROB_macro,$(1)))
endef

# Set a couple of common variables.
define SETVARS
	set -e; \
	pkg="$(call GETVAR,gpg4win_pkg_$(1))";				\
	pkg_version="$(1)-$(call GETVAR,gpg4win_pkg_$(1)_version)";	\
	pkgsdir="$(bdir)/$$$${pkg_version}";				\
	pkgbdir="$(bdir)/$$$${pkg_version}-build";			\
	pkgpdir="$(pdir)/$$$${pkg_version}";				\
	pkgpbdir="$(pdir)/$(1)";	          			\
	pkgidir="$(ipdir)/$$$${pkg_version}";				\
	pkg_dev="$(call GETVAR,gpg4win_pkg_$(1)_dev)";			\
	pkg_version_dev="$(1)-dev-$(call GETVAR,gpg4win_pkg_$(1)_version)"; \
	pkgidir_dev="$(ipdir)/$$$${pkg_version_dev}";			\
	pkgcfg="$(call GETVAR,gpg4win_pkg_$(1)_configure)";		\
	pkgextracflags="$(call GETVAR,gpg4win_pkg_$(1)_extracflags)";	\
	pkgmkargs="$(call GETVAR,gpg4win_pkg_$(1)_make_args)";          \
	pkgmkargs_inst="$(call GETVAR,gpg4win_pkg_$(1)_make_args_inst)";\
	pkgmkdir="$(call GETVAR,gpg4win_pkg_$(1)_make_dir)";             \
	pkgmkdir_inst="$(call GETVAR,gpg4win_pkg_$(1)_make_dir)";        \
	export PKG_CONFIG="$(tsdir)/src/pkg-config";			\
	export PKG_CONFIG_PATH="$(idir)/lib/pkgconfig";			\
	export PKG_CONFIG_LIBDIR="";					\
	export PATH="$(idir)/bin:$${PATH}";				\
	export SYSROOT="$(idir)";					\
	export CONFIG_SITE="$(tsdir)/src/config.site"
endef

# Set variables for building in an additional architecture
define SETVARS_EX
	set -e; \
	pkg="$(call GETVAR,gpg4win_pkg_$(1))";                              \
	pkg_version="$(1)-$(call GETVAR,gpg4win_pkg_$(1)_version)";         \
	pkgsdir="$(bdir)/$$$${pkg_version}";                                \
	pkgbdir="$(bdir)/$$$${pkg_version}-ex-build";                       \
	pkgpdir="$(pdir)/$$$${pkg_version}";                                \
	pkgpbdir="$(pdir)/$(1)";                                            \
	pkgidir="$(ex_ipdir)/$$$${pkg_version}";                            \
	pkgidir_dev="$(ex_ipdir)/$$$${pkg_version_dev}";                    \
	pkgcfg="$(call GETVAR,gpg4win_pkg_$(1)_ex_configure)";              \
	pkgextracflags="$(call GETVAR,gpg4win_pkg_$(1)_ex_extracflags)";    \
	pkgmkargs="$(call GETVAR,gpg4win_pkg_$(1)_ex_make_args)";           \
	pkgmkargs_inst="$(call GETVAR,gpg4win_pkg_$(1)_ex_make_args_inst)"; \
	pkgmkdir="$(call GETVAR,gpg4win_pkg_$(1)_ex_make_dir)";             \
	pkgmkdir_inst="$(call GETVAR,gpg4win_pkg_$(1)_ex_make_dir)";        \
	export PKG_CONFIG="$(tsdir)/src/pkg-config";                        \
	export PKG_CONFIG_PATH="$(ex_idir)/lib/pkgconfig";                  \
	export PKG_CONFIG_LIBDIR="";                                        \
	export PATH="$(ex_idir)/bin:$${PATH}";                              \
	export SYSROOT="$(ex_idir)"
endef

define SETVARS_WINE
	set -e; \
	if [ -z "$$$$(which $(WINE))" ]; then \
		echo "ERROR: For the msi-package wine needs to be installed."; \
	exit 1; \
	fi; \
	if [ -z "$(WIXPREFIX)" ]; then \
		if [ -d `readlink -f ~/w32root/wixtools` ]; then \
			WIXPREFIX2=`readlink -f ~/w32root/wixtools`; \
			echo "Using $$$$WIXPREFIX2 as WIXPREFIX"; \
		else \
			echo "ERROR: You must set WIXPREFIX to an installation of wixtools."; \
			exit 1; \
		fi; \
	else \
		WIXPREFIX2="$(WIXPREFIX)"; \
	fi; \
	if [ -z "$$$$WINEPREFIX" ]; then \
		WINEPREFIX="$$$$HOME/.wine"; \
		if [ ! -e "$$$$WINEPREFIX/dosdevices" ]; then \
			echo "ERROR: No wine prefix found under $$WINEPREFIX"; \
			exit 1; \
		fi; \
	fi; \
	WINEINST=$$$$WINEPREFIX/dosdevices/k:; \
	WINESRC=$$$$WINEPREFIX/dosdevices/i:; \
	WINEINSTEX=$$$$WINEPREFIX/dosdevices/j:; \
	if [ -e "$$$$WINEINST" ]; then \
		echo "ERROR: $$$$WINEINST already exists. Please remove."; \
		exit 1; \
	fi; \
	if [ -e "$$$$WINESRC" ]; then \
		echo "ERROR: $$$$WINESRC already exists. Please remove."; \
		exit 1; \
	fi; \
	if [ -e "$$$$WINEINSTEX" ]; then \
		echo "ERROR: $$$$WINEINSTEX already exists. Please remove."; \
		exit 1; \
	fi; \
	MSI_VERSION=$$$$(echo $(VSD_VERSION))
endef

# Same as above
define SETVARS_WINE_TWO_DOLLAR
	set -e; \
	if [ -z "$$(which $(WINE))" ]; then \
		echo "ERROR: For the msi-package wine needs to be installed."; \
	exit 1; \
	fi; \
	if [ -z "$(WIXPREFIX)" ]; then \
		if [ -d `readlink -f ~/w32root/wixtools` ]; then \
			WIXPREFIX2=`readlink -f ~/w32root/wixtools`; \
			echo "Using $$WIXPREFIX2 as WIXPREFIX"; \
		else \
			echo "ERROR: You must set WIXPREFIX to an installation of wixtools."; \
			exit 1; \
		fi; \
	else \
		WIXPREFIX2="$(WIXPREFIX)"; \
	fi; \
	if [ -z "$$WINEPREFIX" ]; then \
		WINEPREFIX="$$HOME/.wine"; \
		if [ ! -e "$$WINEPREFIX/dosdevices" ]; then \
			echo "ERROR: No wine prefix found under $$WINEPREFIX"; \
			exit 1; \
		fi; \
	fi; \
	WINEINST=$$WINEPREFIX/dosdevices/k:; \
	WINESRC=$$WINEPREFIX/dosdevices/i:; \
	WINEINSTEX=$$WINEPREFIX/dosdevices/j:; \
	if [ -e "$$WINEINST" ]; then \
		echo "ERROR: $$WINEINST already exists. Please remove."; \
		exit 1; \
	fi; \
	if [ -e "$$WINESRC" ]; then \
		echo "ERROR: $$WINESRC already exists. Please remove."; \
		exit 1; \
	fi; \
	if [ -e "$$WINEINSTEX" ]; then \
		echo "ERROR: $$WINEINSTEX already exists. Please remove."; \
		exit 1; \
	fi; \
	MSI_VERSION=$$(echo $(VSD_VERSION))
endef

# Support macro.  Unpack the archive $(1).
define DEFLATE_macro
	rm -rf $$$${pkgsdir}; \
	case "$(1)" in			\
          */qtbase*.*.tar.xz)          \
            $(TAR) -xJ --transform='s,^qtbase-everywhere-src,qtbase,' -f "$(1)" ;; \
          */qttools*.*.tar.xz)          \
            $(TAR) -xJ --transform='s,^qttools-everywhere-src,qttools,' -f "$(1)" ;; \
          */qtwinextras*.*.tar.xz)          \
            $(TAR) -xJ --transform='s,^qtwinextras-everywhere-src,qtwinextras,' -f "$(1)" ;; \
          */qtsvg*.*.tar.xz)          \
            $(TAR) -xJ --transform='s,^qtsvg-everywhere-src,qtsvg,' -f "$(1)" ;; \
          */qttranslations*.*.tar.xz)          \
            $(TAR) -xJ --transform='s,^qttranslations-everywhere-src,qttranslations,' -f "$(1)" ;; \
          */boost*.*.tar.bz2)          \
            $(TAR) -xj --transform='s,^boost_1_60_0,boost-1.60.0,' -f "$(1)" ;; \
	  *.tar.gz | *.tgz)		\
	    $(TAR) xzf "$(1)" ;;	\
	  *.tar.bz2 | *.tbz2 | *.tbz)	\
	    $(TAR) xjf "$(1)" ;;	\
	  *.tar.xz )          		\
	    $(TAR) xJf "$(1)" ;;	\
	  *.exe ) 	         		\
	    cp "$(1)" .       ;;	\
	  *.zip)			\
	    $(UNZIP) -o "$(1)" ;;		\
	esac
endef

# Support macro.  Strip all exe files below $(1).
define STRIP_macro
	if test -z '$(DEBUG)'; then			\
	  (cd $(1);					\
	   for f in `find . -name \*.exe -o -name \*.dll`; do		\
	   echo Calling $(STRIP) "$$$${pkg_version}/$$$${f}"; \
	   $(STRIP) "$$$${f}"; done);			\
	fi
endef

# Support macro.  Strip all exe files below $(1) using STRIP_EX.
define STRIP_EX_macro
	if test -z '$(DEBUG)'; then			\
	  (cd $(1);					\
	   for f in `find . -name \*.exe -o -name \*.dll`; do		\
	   echo Calling $(STRIP_EX) "$$$${pkg_version}/$$$${f}"; \
	   $(STRIP_EX) "$$$${f}"; done);			\
	fi
endef

define GETDEPS
  $(addprefix stamps/stamp-final-, $(call GETVAR,gpg4win_pkg_$(1)_deps))
endef

define GETDEPS_EX
  $(addprefix stamps/stamp-final-ex-, $(call GETVAR,gpg4win_pkg_$(1)_ex_deps))
endef

# Template for source packages to build for an additional host

define EXPKG_template_

pkg_files += $(call GETVAR,gpg4win_pkg_$(1))

stamps/stamp-$(1)-ex-00-unpack: stamps/stamp-$(1)-00-unpack $(call GETDEPS_EX,$(1))
	touch stamps/stamp-$(1)-ex-00-unpack

stamps/stamp-$(1)-ex-01-patch: stamps/stamp-$(1)-ex-00-unpack stamps/stamp-$(1)-01-patch
	touch stamps/stamp-$(1)-ex-01-patch

stamps/stamp-$(1)-ex-02-configure: stamps/stamp-$(1)-ex-01-patch
	($(call SETVARS_EX,$(1));				\
	 mkdir "$$$${pkgbdir}";				\
	  cd "$$$${pkgbdir}";				\
	 eval "../$$$${pkg_version}/configure"		\
		--prefix="$$$${pkgidir}"		\
		--host=$(GPGEX_ADD_HOST)		\
		--build=$(build)			\
		$$$${pkgcfg} CFLAGS=\"-mms-bitfields $$$${pkgextracflags}\";\
	 shopt -s nullglob;					\
	 for pfile in "$$$${pkgpbdir}"/*.postcfg       		\
                       "$$$${pkgpdir}"/*.postcfg ; do  		\
	   (cd "$$$${pkgsdir}"; "$$$${pfile}")		     	\
	 done;                                               	\
	 for pfile in "$$$${pkgpbdir}"/*.postcfg-build    	\
                       "$$$${pkgpdir}"/*.postcfg-build ; do	\
	   (cd "$$$${pkgbdir}"; "$$$${pfile}")			\
	 done)
	touch stamps/stamp-$(1)-ex-02-configure

stamps/stamp-$(1)-ex-03-make: stamps/stamp-$(1)-ex-02-configure
	($(call SETVARS_EX,$(1));				\
	  cd "$$$${pkgbdir}";				\
	  test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}";	\
	  $(MAKE) $(AM_MAKEFLAGS) $(GPG4WIN_PARALLEL) $$$${pkgmkargs} \
	  )
	touch stamps/stamp-$(1)-ex-03-make

# Note that post_install must come last because it may be empty and
# "; ;" is a syntax error.
stamps/stamp-$(1)-ex-04-install: stamps/stamp-$(1)-ex-03-make
	($(call SETVARS_EX,$(1));				\
	  cd "$$$${pkgbdir}";				\
	  $(MAKE) $(AM_MAKEFLAGS) $$$${pkgmkargs_inst} install; \
	  $(call STRIP_EX_macro,"$$$${pkgidir}");		\
	  rm -f "$$$${pkgidir}/share/info/dir";		\
	  $(call gpg4win_pkg_$(call FROB_macro,$(1))_ex_post_install))
	touch stamps/stamp-$(1)-ex-04-install

stamps/stamp-$(1)-ex-05-stow: stamps/stamp-$(1)-ex-04-install
	($(call SETVARS_EX,$(1));				\
	 cd $(ex_ipdir);					\
	 $(STOW) -t `readlink -f $(ex_idir)` "$$$${pkg_version}")
	touch stamps/stamp-$(1)-ex-05-stow

stamps/stamp-final-ex-$(1): stamps/stamp-$(1)-ex-05-stow
	touch stamps/stamp-final-ex-$(1)

.PHONY : clean-ex-$(1)
clean-ex-$(1):
	($(call SETVARS_EX,$(1));				\
	 (cd $(ex_ipdir) &&				\
	  ($(STOW) -D "$$$${pkg_version}";		\
	   rm -fR "$$$${pkg_version}"));		\
	 rm -fR "$$$${pkgsdir}" "$$$${pkgbdir}")
	rm -f stamps/stamp-final-ex-$(1) stamps/stamp-$(1)-ex-*

endef

define EXPKG_template
$(if $(filter-out no, $(call GETVAR,gpg4win_pkg_$(1))),
  $(call EXPKG_template_,$1))
endef


# Template for source packages.

define SPKG_template_

pkg_files += $(call GETVAR,gpg4win_pkg_$(1))

stamps/stamp-$(1)-00-unpack: stamps/stamp-directories $(call GETDEPS,$(1))
	(cd $(bdir);					\
	 $(call SETVARS,$(1));				\
	 $(call DEFLATE_macro,$$$${pkg}))
	touch stamps/stamp-$(1)-00-unpack

stamps/stamp-$(1)-01-patch: stamps/stamp-$(1)-00-unpack
	(shopt -s nullglob;				\
	 $(call SETVARS,$(1));				\
	 for pfile in "$$$${pkgpbdir}"/*.patch "$$$${pkgpdir}"/*.patch ; do  \
	   (cd "$$$${pkgsdir}"; "$$$${pfile}")		\
	 done)
	touch stamps/stamp-$(1)-01-patch

stamps/stamp-$(1)-02-configure: stamps/stamp-$(1)-01-patch
	($(call SETVARS,$(1)); \
	mkdir "$$$${pkgbdir}"; \
	cd "$$$${pkgbdir}"; \
	eval "../$$$${pkg_version}/configure" \
		--prefix="$$$${pkgidir}" \
		--host=$(host) \
		--build=$(build) \
	$$$${pkgcfg} CFLAGS=\"-mms-bitfields $$$${pkgextracflags}\";\
	shopt -s nullglob; \
	for pfile in "$$$${pkgpbdir}"/*.postcfg \
				"$$$${pkgpdir}"/*.postcfg ; do \
			(cd "$$$${pkgsdir}"; "$$$${pfile}") \
		done; \
	for pfile in "$$$${pkgpbdir}"/*.postcfg-build \
				 "$$$${pkgpdir}"/*.postcfg-build ; do \
				(cd "$$$${pkgbdir}"; "$$$${pfile}") \
	done;) && \
	touch stamps/stamp-$(1)-02-configure

stamps/stamp-$(1)-03-make: stamps/stamp-$(1)-02-configure
	($(call SETVARS,$(1));				\
	  cd "$$$${pkgbdir}";				\
	  test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}";	\
	  $(MAKE) $(AM_MAKEFLAGS) $(GPG4WIN_PARALLEL) $$$${pkgmkargs})
	touch stamps/stamp-$(1)-03-make

# Note that post_install must come last because it may be empty and
# "; ;" is a syntax error.
stamps/stamp-$(1)-04-install: stamps/stamp-$(1)-03-make
	($(call SETVARS,$(1));				\
	  cd "$$$${pkgbdir}";				\
	  cd "$$$${pkgmkdir_inst}";			\
	  $(MAKE) $(AM_MAKEFLAGS) $$$${pkgmkargs_inst} install; \
	  $(call STRIP_macro,"$$$${pkgidir}");		\
	  rm -f "$$$${pkgidir}/share/info/dir";		\
	  $(call gpg4win_pkg_$(call FROB_macro,$(1))_post_install))
	touch stamps/stamp-$(1)-04-install

stamps/stamp-$(1)-05-stow: stamps/stamp-$(1)-04-install
	($(call SETVARS,$(1));				\
	 cd $(ipdir);					\
	 $(STOW) "$$$${pkg_version}")
	touch stamps/stamp-$(1)-05-stow

stamps/stamp-final-$(1): stamps/stamp-$(1)-05-stow
	touch stamps/stamp-final-$(1)

.PHONY : clean-$(1)
clean-$(1):
	($(call SETVARS,$(1));				\
	 (cd $(ipdir) &&				\
	  ($(STOW) -D "$$$${pkg_version}";		\
	   rm -fR "$$$${pkg_version}"));		\
	 rm -fR "$$$${pkgsdir}" "$$$${pkgbdir}")
	rm -f stamps/stamp-final-$(1) stamps/stamp-$(1)-*

endef

define SPKG_template
$(if $(filter-out no, $(call GETVAR,gpg4win_pkg_$(1))),
  $(call SPKG_template_,$1))
endef


# Template for source packages using only make and no build
# directory.

define MPKG_template_

pkg_files += $(call GETVAR,gpg4win_pkg_$(1))

stamps/stamp-$(1)-00-unpack: stamps/stamp-directories $(call GETDEPS,$(1))
	(cd $(bdir);					\
	 $(call SETVARS,$(1));				\
	 $(call DEFLATE_macro,$$$${pkg}))
	touch stamps/stamp-$(1)-00-unpack

stamps/stamp-$(1)-01-patch: stamps/stamp-$(1)-00-unpack
	(shopt -s nullglob;				\
	 $(call SETVARS,$(1));				\
	 for pfile in "$$$${pkgpbdir}"/*.patch "$$$${pkgpdir}"/*.patch ; do \
	   (cd "$$$${pkgsdir}"; "$$$${pfile}")		\
	 done)
	touch stamps/stamp-$(1)-01-patch

stamps/stamp-$(1)-03-make: stamps/stamp-$(1)-01-patch
	($(call SETVARS,$(1));				\
	  cd "$$$${pkgsdir}";				\
	  test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}";	\
	  $(MAKE) $(AM_MAKEFLAGS) $$$${pkgmkargs})
	touch stamps/stamp-$(1)-03-make

stamps/stamp-$(1)-04-install: stamps/stamp-$(1)-03-make
	($(call SETVARS,$(1));				\
	  cd "$$$${pkgsdir}";				\
	  $(MAKE) $(AM_MAKEFLAGS) $$$${pkgmkargs_inst} install; \
	  $(call STRIP_macro,"$$$${pkgidir}"); \
	  $(call gpg4win_pkg_$(call FROB_macro,$(1))_post_install))
	touch stamps/stamp-$(1)-04-install

stamps/stamp-$(1)-05-stow: stamps/stamp-$(1)-04-install
	($(call SETVARS,$(1));				\
	 cd $(ipdir);					\
	 $(STOW) "$$$${pkg_version}")
	touch stamps/stamp-$(1)-05-stow

stamps/stamp-final-$(1): stamps/stamp-$(1)-05-stow
	touch stamps/stamp-final-$(1)

.PHONY : clean-$(1)
clean-$(1):
	($(call SETVARS,$(1));				\
	 (cd $(ipdir) &&				\
	  ($(STOW) -D "$$$${pkg_version}";		\
	   rm -fR "$$$${pkg_version}"));		\
	 rm -fR "$$$${pkgsdir}")
	rm -f stamps/stamp-final-$(1) stamps/stamp-$(1)-*

endef

define MPKG_template
$(if $(filter-out no, $(call GETVAR,gpg4win_pkg_$(1))),
  $(call MPKG_template_,$1))
endef



# Template for binary packages.

define BPKG_template_

pkg_files += $(call GETVAR,gpg4win_pkg_$(1))
pkg_files += $(call GETVAR,gpg4win_pkg_$(1)_dev)

stamps/stamp-$(1)-00-install: stamps/stamp-directories $(call GETDEPS,$(1))
	($(call SETVARS,$(1));				\
	 $(MKDIR) "$$$${pkgidir}";			\
	 cd $$$${pkgidir};				\
	 $(call DEFLATE_macro,$$$${pkg}))
	touch stamps/stamp-$(1)-00-install

# Note that post_install must come last because it may be empty and
# "; ;" is a syntax error.
stamps/stamp-$(1)-01-install-dev: stamps/stamp-$(1)-00-install
	($(call SETVARS,$(1));				\
	 $(MKDIR) "$$$${pkgidir_dev}";			\
	 (cd $$$${pkgidir_dev};				\
	  $(call DEFLATE_macro,$$$${pkg_dev}));		\
	 $(call gpg4win_pkg_$(call FROB_macro,$(1))_post_install))
	touch stamps/stamp-$(1)-01-install-dev

stamps/stamp-$(1)-02-stow: stamps/stamp-$(1)-01-install-dev
	($(call SETVARS,$(1));				\
	 cd $(ipdir);					\
	 $(STOW) "$$$${pkg_version}")
	touch stamps/stamp-$(1)-02-stow

stamps/stamp-$(1)-03-stow-dev: stamps/stamp-$(1)-02-stow
	($(call SETVARS,$(1));				\
	 cd $(ipdir);					\
	 $(STOW) "$$$${pkg_version_dev}")
	touch stamps/stamp-$(1)-03-stow-dev

stamps/stamp-final-$(1): stamps/stamp-$(1)-03-stow-dev
	touch stamps/stamp-final-$(1)

.PHONY : clean-$(1)
clean-$(1):
	($(call SETVARS,$(1));				\
	 cd $(ipdir) &&					\
	 ($(STOW) -D "$$$${pkg_version}";		\
	  $(STOW) -D "$$$${pkg_version_dev}";		\
	  rm -fR "$$$${pkg_version}" "$$$${pkg_version_dev}"))
	rm -f stamps/stamp-final-$(1) stamps/stamp-$(1)-*

endef

define BPKG_template
$(if $(filter-out no, $(call GETVAR,gpg4win_pkg_$(1))),
  $(call BPKG_template_,$1))
endef

# Template for qt packages.

define QTPKG_template_

pkg_files += $(call GETVAR,gpg4win_pkg_$(1))

stamps/stamp-$(1)-00-unpack: stamps/stamp-directories $(call GETDEPS,$(1))
	(cd $(bdir);					\
	 $(call SETVARS,$(1));				\
	 $(call DEFLATE_macro,$$$${pkg}))
	touch stamps/stamp-$(1)-00-unpack

stamps/stamp-$(1)-01-patch: stamps/stamp-$(1)-00-unpack
	(shopt -s nullglob;				\
	 $(call SETVARS,$(1));				\
	 for pfile in "$$$${pkgpbdir}"/*.patch "$$$${pkgpdir}"/*.patch ; do  \
	   (cd "$$$${pkgsdir}"; "$$$${pfile}")		\
	 done)
	touch stamps/stamp-$(1)-01-patch

stamps/stamp-$(1)-02-configure: stamps/stamp-$(1)-01-patch
	($(call SETVARS,$(1)); \
	mkdir "$$$${pkgbdir}"; \
	cd "$$$${pkgbdir}"; \
	$$$${pkgcfg}) && \
	touch stamps/stamp-$(1)-02-configure

stamps/stamp-$(1)-03-make: stamps/stamp-$(1)-02-configure
	($(call SETVARS,$(1));				\
	  cd "$$$${pkgbdir}";				\
	  test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}";	\
	  $(MAKE) $(AM_MAKEFLAGS) $(GPG4WIN_PARALLEL) $$$${pkgmkargs})
	touch stamps/stamp-$(1)-03-make

# Note that post_install must come last because it may be empty and
# "; ;" is a syntax error.
stamps/stamp-$(1)-04-install: stamps/stamp-$(1)-03-make
	($(call SETVARS,$(1)); \
	$(call gpg4win_pkg_$(call FROB_macro,$(1))_post_install))
	touch stamps/stamp-$(1)-04-install

stamps/stamp-$(1)-05-stow: stamps/stamp-$(1)-04-install
	($(call SETVARS,$(1));				\
	 cd $(ipdir);					\
	 $(STOW) "$$$${pkg_version}")
	touch stamps/stamp-$(1)-05-stow

stamps/stamp-final-$(1): stamps/stamp-$(1)-05-stow
	touch stamps/stamp-final-$(1)

.PHONY : clean-$(1)
clean-$(1):
	($(call SETVARS,$(1));				\
	 (cd $(ipdir) &&				\
	  ($(STOW) -D "$$$${pkg_version}";		\
	   rm -fR "$$$${pkg_version}"));		\
	 rm -fR "$$$${pkgsdir}" "$$$${pkgbdir}")
	rm -f stamps/stamp-final-$(1) stamps/stamp-$(1)-*

endef

define QTPKG_template
$(if $(filter-out no, $(call GETVAR,gpg4win_pkg_$(1))),
  $(call QTPKG_template_,$1))
endef

# Template for internal packages.

define IPKG_template

stamps/stamp-final-$(1): stamps/stamp-directories $(call GETDEPS,$(1))
	touch stamps/stamp-final-$(1)
endef

# Template for README files
# (The final awk command converts the file endings).

define README_template
README.$(1).txt : versioninfo.txt NEWS.tmp $(top_srcdir)/doc/README.$(1).txt \
                  COMPONENTS-list.tmp $(top_srcdir)/doc/beta-warning.txt
	sed -e '/^;.*/d;/!VERSIONINFO!/{r versioninfo.txt' -e 'd;}' \
	-e '/!NEWSFILE!/{r NEWS.tmp' -e 'd;}' \
	-e '/!NEWSFILE!/{r NEWS.tmp' -e 'd;}' \
	-e '/!COMPONENTS!/{r COMPONENTS-list.tmp' -e 'd;}' \
        -e '/!PKG-COPYRIGHT!/{r $(top_srcdir)/doc/pkg-copyright.txt' -e 'd;}' \
        -e 's,!VERSION!,$(VERSION),g' \
	-e 's,!BUILD_ISODATE!,$(BUILD_ISODATE),g' \
	   < $(top_srcdir)/doc/README.$(1).txt \
	   | (if echo "$(VERSION)" | egrep 'svn|rc|beta|git' >/dev/null; then \
              sed -e '/!BETA-WARNING!/{r $(top_srcdir)/doc/beta-warning.txt' \
               -e 'd;}'; else sed -e 's,!BETA-WARNING!,,g'; fi) \
           | awk '{printf "%s\r\n", $$$$0}' >README.$(1).txt
endef

define HOWTO_template
HOWTO-$(1).$(2).txt : $(top_srcdir)/doc/HOWTO-$(1).$(2).txt
	sed -e '/^;.*/d' \
        -e 's,!VERSION!,$(VERSION),g' \
	-e 's,!BUILD_ISODATE!,$(BUILD_ISODATE),g' \
	   < $(top_srcdir)/doc/HOWTO-$(1).$(2).txt \
        | awk '{printf "%s\r\n", $$$$0}' > HOWTO-$(1).$(2).txt
endef

# Special Template for boost.
define BOOST_template_
pkg_files += $(call GETVAR,gpg4win_pkg_$(1))

stamps/stamp-$(1)-00-unpack: stamps/stamp-directories $(call GETDEPS,$(1))
	(cd $(bdir);					\
	 $(call SETVARS,$(1));				\
	 $(call DEFLATE_macro,$$$${pkg}))
	touch stamps/stamp-$(1)-00-unpack

stamps/stamp-$(1)-01-patch: stamps/stamp-$(1)-00-unpack
	(shopt -s nullglob;				\
	 $(call SETVARS,$(1));				\
	 for pfile in "$$$${pkgpbdir}"/*.patch "$$$${pkgpdir}"/*.patch ; do  \
	   (cd "$$$${pkgsdir}"; "$$$${pfile}")		\
	 done)
	touch stamps/stamp-$(1)-01-patch

stamps/stamp-$(1)-02-build: stamps/stamp-$(1)-01-patch
	($(call SETVARS,$(1)); \
	cd $$$${pkgsdir}/tools/build/; \
	./bootstrap.sh; \
	cd $$$${pkgsdir}; \
	echo "using gcc : mxe : $(host)-g++ : <rc>$(host)-windres <archiver>$(host)-ar <ranlib>$(host)-ranlib ;" > "user-config.jam"; \
	./tools/build/b2 \
        -a \
        -q \
        '$(GPG4WIN_PARALLEL)' \
        --ignore-site-config \
        --user-config=user-config.jam \
        abi=ms \
        address-model=32 \
        architecture=x86 \
        binary-format=pe \
        link=shared \
        target-os=windows \
        threadapi=win32 \
        threading=multi \
        variant=release \
        toolset=gcc-mxe \
        cxxflags=-std=gnu++98 \
        --layout=tagged \
        --disable-icu \
        --without-mpi \
        --without-python \
        --prefix=$$$${pkgidir} \
        --exec-prefix=$$$${pkgidir}/bin \
        --libdir=$$$${pkgidir}/lib \
        --includedir=$$$${pkgidir}/include \
        -sEXPAT_INCLUDE='$(idir)/include' \
        -sEXPAT_LIBPATH='$(idir)/lib' \
        -sBZIP2_INCLUDE='$(idir)/include' \
        -sBZIP2_LIBPATH='$(idir)/lib' \
        install) && \
        touch stamps/stamp-$(1)-02-build

stamps/stamp-$(1)-03-stow: stamps/stamp-$(1)-02-build
	($(call SETVARS,$(1));				\
	 cd $(ipdir);					\
	 $(STOW) "$$$${pkg_version}")
	touch stamps/stamp-$(1)-03-stow

stamps/stamp-final-$(1): stamps/stamp-$(1)-03-stow
	touch stamps/stamp-final-$(1)

.PHONY : clean-$(1)
clean-$(1):
	($(call SETVARS,$(1));				\
	 (cd $(ipdir) &&				\
	  ($(STOW) -D "$$$${pkg_version}";		\
	   rm -fR "$$$${pkg_version}"));		\
	 rm -fR "$$$${pkgsdir}" "$$$${pkgbdir}")
	rm -f stamps/stamp-final-$(1) stamps/stamp-$(1)-*
endef

# Template for source packages of KDE software
define KDEPKG_template_

pkg_files += $(call GETVAR,gpg4win_pkg_$(1))

stamps/stamp-$(1)-00-unpack: stamps/stamp-directories $(call GETDEPS,$(1))
	(cd $(bdir);					\
	 $(call SETVARS,$(1));				\
	 $(call DEFLATE_macro,$$$${pkg}))
	touch stamps/stamp-$(1)-00-unpack

stamps/stamp-$(1)-01-patch: stamps/stamp-$(1)-00-unpack
	(shopt -s nullglob;				\
	 $(call SETVARS,$(1));				\
	 cd "$$$${pkgsdir}";				\
	 sed -i 's/set(KF5_MIN_VERSION.*)/set(KF5_MIN_VERSION "5.77.0")/' CMakeLists.txt; \
	 sed -i 's/set(KF5_VERSION.*)/set(KF5_VERSION "5.77.0")/' CMakeLists.txt; \
	 sed -i 's/set(KMIME_VERSION.*)/set(KMIME_VERSION "5.2.40")/' CMakeLists.txt; \
	 sed -i 's/set(LIBKLEO_VERSION.*)/set(LIBKLEO_VERSION "5.4.40")/' CMakeLists.txt; \
	 sed -i 's/set(QT_REQUIRED_VERSION.*)/set(QT_REQUIRED_VERSION "5.10.0")/' CMakeLists.txt; \
	 sed -i 's/set(GPGME_REQUIRED_VERSION.*)/set(GPGME_REQUIRED_VERSION "1.10.0")/' CMakeLists.txt; \
	 for pfile in "$$$${pkgpbdir}"/*.patch "$$$${pkgpdir}"/*.patch ; do  \
	   (cd "$$$${pkgsdir}"; "$$$${pfile}")		\
	 done)
	touch stamps/stamp-$(1)-01-patch

stamps/stamp-$(1)-02-configure: stamps/stamp-$(1)-01-patch
	($(call SETVARS,$(1));				\
	 mkdir "$$$${pkgbdir}";				\
	  cd "$$$${pkgbdir}";				\
	 cmake 		\
		-DCMAKE_INSTALL_PREFIX="$$$${pkgidir}" \
		-DCMAKE_PREFIX_PATH="$$$${pkgidir}" \
		-DCMAKE_TOOLCHAIN_FILE=$(abs_top_srcdir)/src/toolchain.cmake \
		-DKDE_INSTALL_DATADIR="$$$${pkgidir}/share" \
		-DBUILD_TESTING=False \
		$$$${pkgcfg} $$$${pkgextracflags} "../$$$${pkg_version}") && \
	touch stamps/stamp-$(1)-02-configure

stamps/stamp-$(1)-03-make: stamps/stamp-$(1)-02-configure
	($(call SETVARS,$(1));				\
	  cd "$$$${pkgbdir}";				\
	  test -n "$$$${pkgmkdir}" && cd "$$$${pkgmkdir}";	\
	  $(MAKE) $(AM_MAKEFLAGS) $(GPG4WIN_PARALLEL) $$$${pkgmkargs})
	touch stamps/stamp-$(1)-03-make

# Note that post_install must come last because it may be empty and
# "; ;" is a syntax error.
stamps/stamp-$(1)-04-install: stamps/stamp-$(1)-03-make
	($(call SETVARS,$(1));				\
	  cd "$$$${pkgbdir}";				\
	  cd "$$$${pkgmkdir_inst}";			\
	  $(MAKE) $(AM_MAKEFLAGS) $$$${pkgmkargs_inst} install; \
	  $(call STRIP_macro,"$$$${pkgidir}");		\
	  $(call gpg4win_pkg_$(call FROB_macro,$(1))_post_install))
	touch stamps/stamp-$(1)-04-install

stamps/stamp-$(1)-05-stow: stamps/stamp-$(1)-04-install
	($(call SETVARS,$(1));				\
	 cd $(ipdir);					\
	 $(STOW) "$$$${pkg_version}")
	touch stamps/stamp-$(1)-05-stow

stamps/stamp-final-$(1): stamps/stamp-$(1)-05-stow
	touch stamps/stamp-final-$(1)

.PHONY : clean-$(1)
clean-$(1):
	($(call SETVARS,$(1));				\
	 (cd $(ipdir) &&				\
	  ($(STOW) -D "$$$${pkg_version}";		\
	   rm -fR "$$$${pkg_version}"));		\
	 rm -fR "$$$${pkgsdir}" "$$$${pkgbdir}")
	rm -f stamps/stamp-final-$(1) stamps/stamp-$(1)-*

endef

define KDEPKG_template
$(if $(filter-out no, $(call GETVAR,gpg4win_pkg_$(1))),
  $(call KDEPKG_template_,$1))
endef

# Sign the file $1 and save the result as $2
define AUTHENTICODE_sign
   set -e;\
   if [ -n "$(AUTHENTICODE_SIGNHOST)" ]; then \
     echo "speedo: Signing via host $(AUTHENTICODE_SIGNHOST)";\
     scp $(1) "$(AUTHENTICODE_SIGNHOST):a.exe" ;\
     ssh "$(AUTHENTICODE_SIGNHOST)" $(AUTHENTICODE_TOOL) sign \
        /n '"g10 Code GmbH"' \
        /tr 'http://rfc3161timestamp.globalsign.com/advanced' /td sha256 \
        /d '"GnuPG VS-Desktop"' \
        /fd sha256 /du https://gnupg.com a.exe; \
     scp "$(AUTHENTICODE_SIGNHOST):a.exe" $(2);\
     echo "signed file is '$(2)'" ;\
   else \
     echo "speedo: Signing using key $(AUTHENTICODE_KEY)";\
     osslsigncode sign -certs $(AUTHENTICODE_CERTS) \
       -pkcs12 $(AUTHENTICODE_KEY) -askpass \
       -ts "http://timestamp.globalsign.com/scripts/timstamp.dll" \
       -h sha256 -n GnuPG -i https://gnupg.org \
       -in $(1) -out $(2) ;\
   fi
endef

define MSI_template

.PHONY : $(1)-package
$(1)-package: installers/GnuPG-VS-Desktop-$(VERSION)-$(1).msi

playground/install/$(1)-x86.wixlib: gnupg-vsd/$(1)/$(1).wxs
	($(call SETVARS_WINE,); \
	( \
	ln -s $(idir) $$$$WINEINST; \
	ln -s $(ex_idir) $$$$WINEINSTEX; \
	ln -s `readlink -f $(top_srcdir)` $$$$WINESRC; \
		$(WINE) $$$$WIXPREFIX2/candle.exe \
		-dInstDir=k: \
		-dInstDirEx=j: \
		-dSrcDir=i:\\src \
		-dVersion=$$$$MSI_VERSION \
		-arch x86 \
		-out k:\\$(1)-$(VERSION)-x86.wixobj \
		-pedantic -wx i:\\src\\gnupg-vsd\\$(1)\\$(1).wxs || exit 1;\
		$(WINE) $$$$WIXPREFIX2/lit.exe \
		-out k:\\$(1)-x86.wixlib \
		-bf \
		-wx \
		-pedantic \
		k:\\$(1)-$(VERSION)-x86.wixobj || exit 1; \
		\
	) || ERR=1; \
		(rm $$$$WINEINST; rm $$$$WINESRC; rm $$$$WINEINSTEX); \
	if [ -n "$$$$ERR" ]; then \
		exit 1; \
	fi \
	)

playground/install/$(1).wixlib: gnupg-vsd/$(1)/$(1).wxs
	($(call SETVARS_WINE,); \
	( \
	ln -s $(idir) $$$$WINEINST; \
	ln -s $(ex_idir) $$$$WINEINSTEX; \
	ln -s `readlink -f $(top_srcdir)` $$$$WINESRC; \
		$(WINE) $$$$WIXPREFIX2/candle.exe \
		-dInstDir=k: \
		-dInstDirEx=j: \
		-dSrcDir=i:\\src \
		-dVersion=$$$$MSI_VERSION \
		-out k:\\$(1)-$(VERSION).wixobj \
		-arch x64 \
		-pedantic -wx i:\\src\\gnupg-vsd\\$(1)\\$(1).wxs || exit 1;\
		$(WINE) $$$$WIXPREFIX2/lit.exe \
		-out k:\\$(1).wixlib \
		-bf \
		-wx \
		-pedantic \
		k:\\$(1)-$(VERSION).wixobj || exit 1; \
		\
	) || ERR=1; \
		(rm $$$$WINEINST; rm $$$$WINESRC; rm $$$$WINEINSTEX); \
	if [ -n "$$$$ERR" ]; then \
		exit 1; \
	fi \
	)

# This is generated by make-msi.pl
gnupg-vsd/$(1)/$(1).wxs: gnupg-vsd/$(1)/VERSION.sig make-msi.pl gpg4win-$(VERSION).wxs
	perl make-msi.pl --guids $(srcdir)/make-msi.guids \
		--manifest gpg4win-$(VERSION).files \
		--version $(VSD_VERSION) \
		-DBUILD_DIR=. -DTOP_SRCDIR=$(top_srcdir) \
		-DSRCDIR=$(srcdir) $(srcdir)/gpg4win.nsi > /dev/null

gnupg-vsd/$(1)/VERSION.sig: gnupg-vsd/$(1)/VERSION
	echo "----------SIGNING----------"
	echo "using key: $(msi_signkey)"
	cat gnupg-vsd/$(1)/VERSION
	gpg --yes -o gnupg-vsd/$(1)/VERSION.sig -bau $(msi_signkey) gnupg-vsd/$(1)/VERSION

gnupg-vsd/$(1)/VERSION: gnupg-vsd/custom.mk
	echo "$(call GETVAR,msi_target_$(1)_VERSION)" > gnupg-vsd/$(1)/VERSION
	echo "$(call GETVAR,msi_target_$(1)_DESC)" >> gnupg-vsd/$(1)/VERSION
	echo "$(call GETVAR,msi_target_$(1)_DESC_SHORT)" >> gnupg-vsd/$(1)/VERSION

gnupg-vsd/$(1)/announcement.txt: gnupg-vsd/custom.mk gnupg-vsd/announcement.de.in gnupg-vsd/announcement.en.in
	cat gnupg-vsd/$(call GETVAR,msi_target_$(1)_announcement) | \
		sed 's/VSD_VERSION/$(VSD_VERSION)/' | \
		sed 's@GNUPG_VSD_CUSTOMER_LINK@https://download.gnupg.com/files/$(call GETVAR,msi_target_$(1)_directory)/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi@' | \
		sed 's@GNUPG_VSD_SOURCE_LINK@https://download.gnupg.com/files/src/Gnupg-VS-Desktop-$(VSD_VERSION).tar.bz2@' > gnupg-vsd/$(1)/announcement.txt

installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi: stamps/stamp-msi-base playground/install/$(1).wixlib \
	gnupg-vsd/$(1)/license.rtf
	scp gnupg-vsd/$(1)/license.rtf \
		 $(WINHOST):AppData/Local/Temp/gpg4win-$(VERSION); \
	scp playground/install/$(1).wixlib \
		 $(WINHOST):AppData/Local/Temp/gpg4win-$(VERSION); \
	scp $(call GETVAR,msi_target_$(1)_branding)/*.bmp \
		 $(WINHOST):AppData/Local/Temp/gpg4win-$(VERSION); \
	ssh $(WINHOST) "cd AppData/Local/Temp/gpg4win-$(VERSION) && $(WINLIGHT) \
	-spdb \
	-ext WixUIExtension \
	-out GnuPG-VS-Desktop-$(VERSION)-$(1).msi \
	 $(call GETVAR,msi_target_$(1)_l10n) \
	-dcl:high \
	-v -pedantic \
	 \
	 gpg4win-$(VERSION).wixlib \
	 gnupg-msi-$(gpg4win_pkg_gnupg_msi_version)-bin.wixlib \
	 $(1).wixlib"; \
	 scp $(WINHOST):AppData/Local/Temp/gpg4win-$(VERSION)/GnuPG-VS-Desktop-$(VERSION)-$(1).msi \
	 installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi;

installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1)-x86.msi: stamps/stamp-msi-base playground/install/$(1)-x86.wixlib \
	gnupg-vsd/$(1)/license.rtf \
	playground/install/gpg4win-$(VERSION)-x86.wixlib
	scp gnupg-vsd/$(1)/license.rtf \
		 $(WINHOST):AppData/Local/Temp/gpg4win-$(VERSION); \
	scp playground/install/gpg4win-$(VERSION)-x86.wixlib \
		 $(WINHOST):AppData/Local/Temp/gpg4win-$(VERSION); \
	scp playground/install/$(1)-x86.wixlib \
		 $(WINHOST):AppData/Local/Temp/gpg4win-$(VERSION); \
	scp $(call GETVAR,msi_target_$(1)_branding)/*.bmp \
		 $(WINHOST):AppData/Local/Temp/gpg4win-$(VERSION); \
	ssh $(WINHOST) "cd AppData/Local/Temp/gpg4win-$(VERSION) && $(WINLIGHT) \
	-spdb \
	-ext WixUIExtension \
	-out GnuPG-VS-Desktop-$(VERSION)-$(1)-x86.msi \
	 $(call GETVAR,msi_target_$(1)_l10n) \
	-dcl:high \
	-v -pedantic \
	 \
	 gpg4win-$(VERSION)-x86.wixlib \
	 gnupg-msi-$(gpg4win_pkg_gnupg_msi_version)-bin.wixlib \
	 $(1)-x86.wixlib"; \
	 scp $(WINHOST):AppData/Local/Temp/gpg4win-$(VERSION)/GnuPG-VS-Desktop-$(VERSION)-$(1)-x86.msi \
	 installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1)-x86.msi;

signed_installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi: installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi
	mkdir -p signed_installers
	$(call AUTHENTICODE_sign,"installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi","signed_installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi");\

stamps/stamp-$(1)-upload: signed_installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi
	(cd signed_installers; sha256sum GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi > \
		GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi.sha256; \
	gpg --yes -o GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi.sig -bau $(msi_signkey) \
		GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi)
	scp signed_installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi \
		signed_installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi.sha256 \
		signed_installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi.sig \
		$(VSD_PUBLISH_HOST)/$(call GETVAR,msi_target_$(1)_directory)
	ssh `echo $(VSD_PUBLISH_HOST) | cut -d ":" -f 1` \
		"cd `echo $(VSD_PUBLISH_HOST) | cut -d ":" -f 2`/$(call GETVAR,msi_target_$(1)_directory) && rm -f GnuPG-VS-Desktop.msi && \
		ln -s GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi GnuPG-VS-Desktop.msi"
	echo "https://download.gnupg.com/files/$(call GETVAR,msi_target_$(1)_directory)/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi" \
	> stamps/stamp-$(1)-upload
	echo "https://download.gnupg.com/files/$(call GETVAR,msi_target_$(1)_directory)/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi.sig" \
	>> stamps/stamp-$(1)-upload

.PHONY : $(1)
$(1): installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1).msi

.PHONY : $(1)-x86
$(1)-x86: installers/GnuPG-VS-Desktop-$(VSD_VERSION)-$(1)-x86.msi
	echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
	echo "XXXX FIXME: x86 Registration of GpgOL and GpgEX does not work! XXXX"
	echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

.PHONY : $(1)-upload
$(1)-upload: stamps/stamp-$(1)-upload
	gpg --yes -o gnupg-vsd-$(VERSION).tar.bz2.sig -bau $(msi_signkey) \
		../gpg4win-$(VERSION).tar.bz2
	rsync -vP ../gpg4win-$(VERSION).tar.bz2 $(VSD_PUBLISH_HOST)/src/Gnupg-VS-Desktop-$(VSD_VERSION).tar.bz2
	rsync -vP gnupg-vsd-$(VERSION).tar.bz2.sig $(VSD_PUBLISH_HOST)/src/GnuPG-VS-Desktop-$(VSD_VERSION).tar.bz2.sig
	echo "Upload URLs:"
	cat stamps/stamp-$(1)-upload
	echo "Source links:"
	echo "https://download.gnupg.com/files/src/Gnupg-VS-Desktop-$(VSD_VERSION).tar.bz2"
	echo "https://download.gnupg.com/files/src/Gnupg-VS-Desktop-$(VSD_VERSION).tar.bz2.sig"

$(1)-announce: gnupg-vsd/$(1)/announcement.txt
	set -x
	echo "-------- Announcement for $(1) ---------"
	cat gnupg-vsd/$(1)/announcement.txt
	echo "-----------------------------"
	echo "Send to: $(call GETVAR,msi_target_$(1)_contact)"
	echo "Ticket: $(call GETVAR,msi_target_$(1)_ticket)"
	echo "-----------------------------"

endef

# Insert the template for each source package.
$(foreach spkg, $(gpg4win_spkgs), $(eval $(call SPKG_template,$(spkg))))

# Insert the template for each gpgEx architecture package.
$(foreach expkg, $(gpg4win_expkgs), $(eval $(call EXPKG_template,$(expkg))))

# Insert the template for each make only source package.
$(foreach mpkg, $(gpg4win_mpkgs), $(eval $(call MPKG_template,$(mpkg))))

# Insert the template for each binary package.
$(foreach bpkg, $(gpg4win_bpkgs), $(eval $(call BPKG_template,$(bpkg))))

# Insert the template for each internal package.
$(foreach ipkg, $(gpg4win_ipkgs), $(eval $(call IPKG_template,$(ipkg))))

# Insert the template for the README and HOWTO files.
$(foreach rll, $(gpg4win_readme_ll), $(eval $(call README_template,$(rll))))

# Insert the template for KDE packages.
$(foreach kdepkg, $(gpg4win_kdepkgs), $(eval $(call KDEPKG_template,$(kdepkg))))

# Insert the template for qt packages.
$(foreach qtpkg, $(gpg4win_qtpkgs), $(eval $(call QTPKG_template,$(qtpkg))))

$(foreach rll, $(gpg4win_howto_smime_ll), \
               $(eval $(call HOWTO_template,SMIME,$(rll))))

$(eval $(call BOOST_template_,boost))

stamps/stamp-final: stamps/stamp-directories
stamps/stamp-final: $(addprefix stamps/stamp-final-,$(gpg4win_build_list)) \
	$(addprefix stamps/stamp-final-ex-,$(gpg4win_build_ex_list))
	touch stamps/stamp-final

$(bdir)/versioninfo.txt: stamps/stamp-final
	touch $(bdir)/versioninfo.txt

all-gpg4win: stamps/stamp-final

# Just to check if we catched all stamps.
clean-stamps:
	$(RM) -fR $(stamps)

clean-gpg4win:
	$(RM) -fR playground stamps

stamps/stamp-versions-all-signed: stamps/stamp-directories \
	$(addsuffix /VERSION.sig, $(addprefix gnupg-vsd/,$(msi_targets)))
	touch stamps/stamp-versions-all-signed

stamps/stamp-all-upload: stamps/stamp-dist-self \
	$(addsuffix -upload, $(addprefix stamps/stamp-,$(msi_targets)))
	echo "Upload URLs:"
	cat $(addsuffix -upload, $(addprefix stamps/stamp-,$(msi_targets)))
	gpg --yes -o gnupg-vsd-$(VERSION).tar.bz2.sig -bau $(msi_signkey) \
		../gpg4win-$(VERSION).tar.bz2
	rsync -vP ../gpg4win-$(VERSION).tar.bz2 $(VSD_PUBLISH_HOST)/src/Gnupg-VS-Desktop-$(VSD_VERSION).tar.bz2
	rsync -vP gnupg-vsd-$(VERSION).tar.bz2.sig $(VSD_PUBLISH_HOST)/src/GnuPG-VS-Desktop-$(VSD_VERSION).tar.bz2.sig
	echo "Source links:"
	echo "https://download.gnupg.com/files/src/Gnupg-VS-Desktop-$(VSD_VERSION).tar.bz2"
	echo "https://download.gnupg.com/files/src/Gnupg-VS-Desktop-$(VSD_VERSION).tar.bz2.sig"
	touch stamps/stamps-all-upload

msi: stamps/stamp-versions-all-signed \
	$(addsuffix .msi,$(addprefix installers/GnuPG-VS-Desktop-$(VSD_VERSION)-,$(msi_targets)))
	if [ -z "$(addsuffix .msi,$(addprefix installers/GnuPG-VS-Desktop-$(VSD_VERSION)-,$(msi_targets)))" ]; then \
		echo "No MSI targets configured."; \
	else \
		echo "######################"; \
		echo "# MSI Packaging done #"; \
		echo "######################"; \
	fi

stamps/stamp-msi-all-signed: gnupg-vsd/sign.mk \
	$(addsuffix .msi,$(addprefix signed_installers/GnuPG-VS-Desktop-$(VSD_VERSION)-,$(msi_targets)))
	touch stamps/stamp-msi-all-signed


msi-signed: stamps/stamp-msi-all-signed
msi-upload: stamps/stamp-all-upload stamps/stamp-dist-self

.PHONY : all-gpg4win clean-stamps clean-gpg4win msi msi-signed msi-upload

# Insert the template for msi packages.
$(foreach msipkg, $(msi_targets), $(eval $(call MSI_template,$(msipkg))))

# @emacs_local_vars_begin@
# @emacs_local_vars_read_only@
# @emacs_local_vars_end@
